﻿function categoriesBookRotator(idBox, nameVar){
//la funzione prende in input idBox, l'id dove sono presenti gli span che raccolgono i libri per categoria. nameVar è il nome della variabile di tipo categoriesBookRotator che è stata appena creata.
		this.box=document.getElementById(idBox);
		block=0;	//interrompe la ricorsione di una display, se viene selezionata un'altra categoria
		this.now=0; //indice di categoria da mostrare
		this.last=0; //indice dell'ultima categoria mostrata.
		this.numCategories=this.box.getElementsByTagName("span").length;
		this.nameCategories=new Array();
		//creo l'array con il nome delle categorie, che è dato dagli id degli span.
		for(var it=0; it<this.numCategories; it++)
			this.nameCategories.push(this.box.getElementsByTagName("span")[it].id);
		//nascondo tutti i primi libri di ogni categoria, che sono gli unici ad essere visibili nella pagina html.
		for(var it=0; it<this.numCategories; it++)
			document.getElementById(this.nameCategories[it]).getElementsByTagName("img")[0].className="notInScreen";
		
		
		//creo il div che conterrà il menu delle categorie, sopra le immagini.
		this.menu=document.createElement("div");
		this.menu.setAttribute("id","menu");
		//lo posiziono sopra il primo span
		this.box.insertBefore(this.menu,document.getElementById(this.nameCategories[0]));
		//creo la lista delle categorie, attribuendo a ogni elemento della lista un'evento javascript per poter cabiare manualmente la categoria visualizzata
		var menu="<ul id=\"rotatorCat\">";
		for(var catIt=0; catIt<this.numCategories; catIt++)
			menu+="<li onclick=\""+nameVar+".changeCat("+catIt+");block=1;\">"+this.nameCategories[catIt]+"</li> \n";
		menu+="</ul>";
		this.menu.innerHTML=menu;
		
		this.changeCat= function(newCat){
		//metodo per cambiare categoria visualizzata. Termina le chiamate temporizzate di this.clock, a this.now viene attribuito l'indice della nuova categoria da visualizzare e viene chiamata la funzione cicla per nascondere i libri precedenti e visualizzare i nuovi
			clearInterval(this.clock);
			this.now=newCat;
			this.cicla();
		}
		
		this.display=function(iter,numImg){
		//iter è un iteratore per le immagini presenti nello span, numImg è il numero di immagini dello span. La funzione cambia una a una la visibility delle immagini di uno span
		
			if (block) {return;} //se block viene settato a 1, vuol dire che è stato premuto un elemento della lista delle categorie, e la ricorsione termina.
			if(numImg==iter) {this.now++;return;} //non ci sono più libri da visualizzare this.now(indice di cateria da mostrare) aumentato e ricorsione termina
			document.getElementById(this.nameCategories[this.now]).getElementsByTagName("img")[iter].style.visibility="visible";
			//l'immagine di indice iter ha ora visibilita=visible
			var oggetto=this;
			setTimeout(function(){oggetto.display(iter+1,numImg);},300);
		}
		
		this.cicla= function(){
		
			var numImgCat=document.getElementById(this.nameCategories[this.last]).getElementsByTagName("img").length;
			//numero di immagini dello span di indice this.last
			for(var it=0; it<numImgCat; it++) //nasconde tutti libri di indice this.last
			  document.getElementById(this.nameCategories[this.last]).getElementsByTagName("img")[it].setAttribute("class","notInScreen");
			document.getElementById("rotatorCat").getElementsByTagName("li")[this.last].removeAttribute("class"); //toglie l'evidenziazione dalla voce del menu
			
			if(this.now==this.numCategories) this.now=0; //riparte dalla prima categoria nel caso siamo arrivati alla fine
			document.getElementById("rotatorCat").getElementsByTagName("li")[this.now].setAttribute("class","onlink");
			//impostata evidenziazione della voce di menu della nuova categoria
			numImgCat=document.getElementById(this.nameCategories[this.now]).getElementsByTagName("img").length;
			//numImgCat è il numero di immagini della categoria
			for(var it=0; it<numImgCat; it++) //per libri di una cat rimuove la classe che li nasconde, e setta visibilità hidden.
				{document.getElementById(this.nameCategories[this.now]).getElementsByTagName("img")[it].removeAttribute("class");
				document.getElementById(this.nameCategories[this.now]).getElementsByTagName("img")[it].style.visibility="hidden";}
			
			this.last=this.now;
			var oggetto=this;
			setTimeout(function(){block=0;oggetto.display(0,numImgCat);},300);
		}
		
		//INIZIALIZZA
		
		document.getElementById("rotatorCat").getElementsByTagName("li")[this.now].setAttribute("class","onlink");//setta il primo elemento del menu come visualizzato
		var numImgCat=document.getElementById(this.nameCategories[this.now]).getElementsByTagName("img").length; //numImgCat è il numero delle immagini presenti nel primo span
		for(var it=0; it<numImgCat; it++) //mostra tutti libri della categoria
			document.getElementById(this.nameCategories[this.now]).getElementsByTagName("img")[it].removeAttribute("class");
		this.now++;	

		
		var oggetto=this;
		if(this.numCategories>1)this.clock=setInterval(function(){oggetto.cicla();},5000);
	
	}
